package xsvg;

import java.io.File;
import java.security.acl.Group;
import java.util.List;

/**
 * SVG图形接口
 * 
 * 
 * @author <a href="mailto:peixere@qq.com">裴绍国</a>
 * @version 2013-09-29
 */
public interface SVGCanvas
{

	/**
	 * 加载图形
	 * 
	 * @param buffer
	 */
	public abstract void load(byte[] buffer);

	/**
	 * 加载图形
	 * 
	 * @param file
	 */
	public abstract void load(File file);


	/**
	 * 添加鼠标监听器
	 * 
	 * @param listener
	 */
	public abstract void addMouseListener(SVGMouseListener listener);

	/**
	 * 移除鼠标监听器
	 * 
	 * @param listener
	 */
	public abstract void removeMouseListener(SVGMouseListener listener);

	/**
	 * 获取节点属性值
	 * @param id
	 * @param name
	 * @return
	 */
	public abstract String getAttributeByElementId(String id, String name);

	/**
	 * 设置节点属性
	 * @param id 节点编号
	 * @param name 属性名
	 * @param value 属性值
	 */
	public abstract void setAttributeByElementId(String id, String name, String value);

	/**
	 * 判断节点属性是否存在
	 * @param id
	 * @param name
	 * @return
	 */
	public abstract boolean hasAttributeByElementId(String id, String name);

	/**
	 * 添加节点属性
	 * @param id
	 * @param name
	 * @param value
	 */
	public abstract void addAttributeByElementId(String id, String name, String value);

	/**
	 * 删除节点属性
	 * @param id
	 * @param name
	 */
	public abstract void removeAttributeByElementId(String id, String name);

	/**
	 * 设置图形显示比例 >0
	 * 
	 * @param scale
	 *            显示比例
	 */
	public abstract void setScale(double scale);

	/**
	 * 获取图形显示比例
	 */
	public abstract double getScale();

	/**
	 * 缩小图形
	 */
	public abstract void zoomIn();

	/**
	 * 还原图形
	 */
	public abstract void zoomReset();

	/**
	 * 放大图形
	 */
	public abstract void zoomOut();

	/**
	 * 该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘。
	 */
	public abstract void invalidate();

	/**
	 * 重绘到界面
	 */
	public abstract void repaint();

	/**
	 * 窗口界面控件
	 * 
	 * @return
	 */
	public abstract Object getComponent();

	/**
	 * 图形宽
	 * 
	 * @return
	 */
	public abstract int getWidth();

	/**
	 * 图形高
	 * 
	 * @return
	 */
	public abstract int getHeight();

	/**
	 * 取SVG根据节点
	 * 
	 * @return
	 */
	public abstract SVGElement getRoot();
	
	
	/**
	 * 取SVG指定id的节点
	 * @param id
	 * @return
	 */
	public abstract SVGElement getSVGElement(String id);

	/**
	 * 取所有组
	 * 
	 * @return
	 */
	public abstract List<Group> getGroups();

}